#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "isp_tuning/tuning_tab.h"
#include "serial.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 初始化 Tab Widget
    // ui->tabWidget->setVisible(false); // 初始设置不可见
    ui->tabWidget->clear();           // 清除所有页面
    ui->tabWidget->setTabsClosable(true); // 允许关闭标签页

    // 连接 tabCloseRequested 信号与槽函数
    connect(ui->tabWidget, &QTabWidget::tabCloseRequested, this, &MainWindow::onTabClosed);
}

MainWindow::~MainWindow()
{
    delete ui;
}

// 模板函数：添加或切换标签页
template<typename T>
void MainWindow::addOrSwitchTab(const QString& title) {
    int tabcnt = ui->tabWidget->count();
    bool is_exist = false;

    // 遍历所有标签页，检查是否已存在同类型标签页
    for (int i = 0; i < tabcnt; ++i) {
        QWidget *tabWidget = ui->tabWidget->widget(i);
        if (T *tab = dynamic_cast<T*>(tabWidget)) {  // 动态类型转换
            ui->tabWidget->setCurrentIndex(i);  // 切换到已存在的标签页
            is_exist = true;
            break;
        }
    }

    // 如果不存在，则新建标签页
    if (!is_exist) {
        T *tab = new T(this);  // 创建标签页
        tab->setAttribute(Qt::WA_DeleteOnClose);  // 设置关闭时自动删除
        int cur = ui->tabWidget->addTab(tab, title);  // 添加标签页
        ui->tabWidget->setCurrentIndex(cur);  // 切换到新标签页
        ui->tabWidget->setVisible(true);  // 显示 Tab Widget

        qDebug() << "Added new tab:" << title;
    }
}

// 标签页关闭槽函数
void MainWindow::onTabClosed(int index) {
    QWidget *tab = ui->tabWidget->widget(index);
    ui->tabWidget->removeTab(index);  // 从 Tab Widget 中移除标签页
    tab->deleteLater();  // 释放内存
}

// 串口设置按钮点击事件
void MainWindow::on_serialButton_clicked() {
    addOrSwitchTab<serial>("串口配置");
}

// ISP按钮点击事件
void MainWindow::on_ISPButton_clicked() {
    addOrSwitchTab<isp_tuning::tuning_tab>("ISP");
}


